﻿var prevDate = new Date();

$(function() {
    $('#date').change(dateChanged);
    $('#scheduleid').change(reloadSchedule);
    $(window).resize(resize);

    resize();

    $('#date').calendar({
        parentElement: '#calendarholder',
        dateFormat: '%d.%m.%Y'
    });
});

function resize() {
    var h = $(window).height() - $('#header').height() - 30;
    if (h < 580) h = 580;
    $('#content').css('height', h);
    var tableHeight = h - $('#scheduleoptions').height() - $('#schedulenav').height() - 68;
    $('table.schedule').css('height', tableHeight);
    var cellHeight = tableHeight / $('table.schedule tr').length;
    $('table.schedule td').height(cellHeight);
}

function setDate(date) {
    $('#date').val(date);
    dateChanged();
    return false;
}

function dateChanged() {
    var newDate = $.parseDate($('#date').val());
    $('#calendarholder td.selected').get(0).calendar.update(new Date(newDate));
    switch($('#mode').val())
    {
        case 'month':
            if (newDate.getMonth() != prevDate.getMonth() || newDate.getYear() != prevDate.getYear()) {
                reloadSchedule();
            }
            break;
        case 'week':
            reloadSchedule();
            break;
    }
    prevDate = newDate;
}

///Перерисовывает календарь на текущую дату
function reloadSchedule() {
    var params = $('#scheduleform').serializeArray();
    params[params.length] = { name: 'timestamp', value: new Date() };
    $('#schedule').css('visibility', 'hidden').load(base + 'schedule.ivp/' + $('#mode').val(), params, function() { resize(); $('#schedule').css('visibility', 'visible'); getSchedulePeriods(); if ($('#exceptions').hasClass('loaded')) getScheduleExceptions(); });
}

//Обновляет список доступных календарей
function updateSchedules(id) {
    var select = $('#scheduleid').get(0);
    select.options.length = 0;
    $.getJSON(base + 'schedule.ivp/list', { json: true, timestamp: new Date().toString() }, function(schedules) {
        $(schedules).each(function(i, el) { select.options.add(new Option(el.Name, el.Id)); });
        $(select).val(id);
        reloadSchedule();
    });
}

function setMode(mode) {
    $('#mode').val(mode);
    //$('#calendarholder').removeClass().addClass(mode + 'mode');
    reloadSchedule();
}

function createPeriod() {
    if (!parseInt($('#scheduleid').val(), 10)) {
        alert('Выберите календарь, для которого вы хотите заполнить расписание.'); $('#scheduleid').focus(); return false;
    }
    var wnd = openDialog('scheduleperiod.ivp/create?' + $('#scheduleform').serialize(), 'schedule');
    wnd.focus();
    return false;
}

function editPeriod(id) {
    var wnd = openDialog('scheduleperiod.ivp/view/' + id,'schedule');
    wnd.focus();
    return false;
}

function deletePeriod(id) {
    if (!confirm('Вы уверены, что хотите удалить это расписание?')) return false;

    var params = { id: id, nolayout: true, timestamp: new Date(), json: true };
    var url = base + 'scheduleperiod.ivp/delete';

    $.getJSON(url, params, function(result) { if (result.hasOwnProperty('IsOK') && !result.IsOK) alert(result.Description); else reloadSchedule(); });
    return false;
}

function createDayException() {
    if (!parseInt($('#scheduleid').val(), 10)) {
        alert('Выберите календарь, для которого вы хотите заполнить расписание.'); $('#scheduleid').focus(); return false;
    }
    var wnd = openDialog('scheduledayexception.ivp/create?' + $('#scheduleform').serialize(), 'schedule', { width: 650, height: 330 });
    wnd.focus();
    return false;
}

function editDayException(id) {
    var wnd = openDialog('scheduledayexception.ivp/view/' + id, 'schedule');
    wnd.focus();
    return false;
}

function deleteDayException(id) {
    if (!confirm('Вы уверены, что хотите удалить это однодневное расписание?')) return false;

    var params = { id: id, nolayout: true, timestamp: new Date(), json: true };
    var url = base + 'scheduledayexception.ivp/delete';

    $.getJSON(url, params, function(result) { if (result.hasOwnProperty('IsOK') && !result.IsOK) alert(result.Description); else reloadSchedule(); });
    return false;
}

function showDayDetails(td, date) {
    $('#date').val(date); //dateChanged();
    td = $(td);
    if (!parseInt($('#scheduleid').val(), 10)) return false;
    $('.daydetails').remove();
    td.append('<div class="popupwrapper daydetails"><div class="popup"></div></div>').find('.popup').load(base + 'schedule.ivp/daydetails/' + $('#scheduleid').val() + '/' + date, {timestamp:new Date()}, function() { td.find('.popupwrapper').show().click(stopPropagation); td.find('.close').click(closePopup); });
}

function closePopup(event) {
    $(event.target).parents('.popupwrapper').remove();
    stopPropagation(event);
    return false;
}

function stopPropagation(event) {
    event.stopImmediatePropagation(); return false;
}

function getSchedulePeriods() {
    $('#periods').load(base + 'schedule.ivp/getperiods', { scheduleid: $('#scheduleid').val(), date: $('#date').val(), timestamp: new Date() });
}

function getScheduleExceptions() {
    $('#exceptions').addClass('loaded').load(base + 'schedule.ivp/getexceptions', { scheduleid: $('#scheduleid').val(), date: $('#date').val(), timestamp: new Date() });
    return false;
}